package cm.cool.web.service.admin;

import java.util.UUID;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.github.pagehelper.PageHelper;

import cm.cool.web.bean.Admin;
import cm.cool.web.data.AdminMapper;
import cm.cool.web.util.respon.PaginationDto;
import cm.cool.web.util.respon.R;
import cm.cool.web.util.respon.ResultEncoding;
import cm.cool.web.util.security.MD5;

/**
 * 添加管理用户
 * 
 * @author fangzhenxing time：2017年10月15日17:28:01
 */
@Service
public class AdminService {

	@Autowired
	private AdminMapper adminMapper;

	/**
	 * 添加管理用户
	 * 
	 * @param admin
	 *            管理用户实体
	 */
	public R insert(Admin admin) {

		R r = new R();

		// 数据校验
		if (R.isNull(admin.getAccount()) || R.isNull(admin.getPassword()) || R.isNull(admin.getPhone())
				|| R.isNull(admin.getUserName()) || R.isNull(admin.getState())) {
			r.setMsg("参数缺失,添加失败");
			r.setCode(ResultEncoding.R_PARAMETER);
			return r;
		}
		admin.setId(UUID.randomUUID().toString());
		admin.setPassword(MD5.EncoderByMd5(admin.getPassword()).toString());

		try {
			//
			Admin c_admin=new Admin();
			c_admin.setAccount(admin.getAccount());
			if(adminMapper.selectAll(c_admin).size()>0){
				r.setMsg("添加失败,帐号已存在");
				r.setCode(ResultEncoding.R_ERR);
				return r;
			}
			
			// 判断数据操作是否正确
			if (adminMapper.insert(admin) == 1) {
				r.setMsg("添加成功");
				return r;
			} else {
				r.setCode(ResultEncoding.R_ERR);
				r.setMsg("添加异常");
				return r;
			}

		} catch (Exception e) {
			e.printStackTrace();
			r.setMsg("添加失败");
			r.setCode(ResultEncoding.R_ERR);
			return r;
		}

	}

	/**
	 * 按条件查询所有
	 * 
	 * @param admin
	 * @param paginationDto
	 * @return
	 */
	public R selectAll(Admin admin, PaginationDto paginationDto) {
		R r = new R();

		try {
			PageHelper.startPage(paginationDto.getCurrentPageNum(), paginationDto.getPerPageSize());
			paginationDto.setEntitys(adminMapper.selectAll(admin));
			int count = adminMapper.selectAllCount(admin);	
			paginationDto.setTotalCount(count);
			paginationDto.setTotalPageNum((int)Math.ceil((count*1.0) / paginationDto.getPerPageSize()));
			r.setData(paginationDto);
		} catch (Exception e) {
			e.printStackTrace();
			r.setCode(ResultEncoding.R_ERR);
			r.setMsg("查询异常");
			return r;
		}
		return r;

	}

	/**
	 * 根据ID删除一个管理用户
	 * 
	 * @param id
	 * @return
	 */
	public R deleteByPrimaryKey(String id) {
		R r = new R();

		// 数据校验
		if (R.isNull(id)) {
			r.setCode(ResultEncoding.R_PARAMETER);
			r.setMsg("参数为空,删除失败");
			return r;
		}

		if (adminMapper.deleteByPrimaryKey(id) == 1) {
			r.setMsg("删除成功");
		} else {
			r.setCode(ResultEncoding.R_ERR);
			r.setMsg("删除异常");
		}

		return r;
	}

	/**
	 * 修改一个管理用户
	 * 
	 * @return
	 */
	public R updateByPrimaryKeySelective(Admin admin) {
		R r = new R();
		try {

			if (R.isNull(admin.getAccount()) || R.isNull(admin.getId()) || R.isNull(admin.getPhone())
					|| R.isNull(admin.getState()) || R.isNull(admin.getUserName())) {
					r.setCode(ResultEncoding.R_PARAMETER);
					r.setMsg("参数缺失,修改失败");
					return r;
			}
			
			if(adminMapper.updateByPrimaryKeySelective(admin)==1){
				r.setMsg("修改成功");
				return r;
			}else{
				r.setCode(ResultEncoding.R_ERR);
				r.setMsg("修改异常");
				return r;
			}

		} catch (Exception e) {
			e.printStackTrace();
			r.setCode(ResultEncoding.R_ERR);
			r.setMsg("系统异常");
			return r;
		}

	}
}
